# Copyright 2018 Maco
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#    http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
import time
from tornado import gen
from tornado.httpclient import AsyncHTTPClient, HTTPRequest

from blockchain.common.setting import setting

__all__ = ['printf', 'request']

_DEBUG = setting()['debug']

NOW = lambda: time.strftime('%y-%m-%d %H:%M:%S', time.localtime())


def printf(string, *args):
    '''Format message output.'''
    if _DEBUG:
        string = string if not args else string % args
        cur_time = NOW()
        print(f'[D {cur_time}] {string}')


@gen.coroutine
def request(url, method='GET', body=None, **kwargs):
    '''
    :param url: <str> url
    :param method: <str> default GET, POST...
    :param body: <str> request body
    :param kwargs: <dict> HTTPRequest(**kwargs)
    '''
    try:
        if method == 'POST':
            url = HTTPRequest(url, method=method, body=body, **kwargs)
        response = yield AsyncHTTPClient().fetch(url)
    except ConnectionRefusedError:
        raise gen.Return()
    raise gen.Return(response)
